Virⁿs yazmak kadar, anti-virⁿs yazman²n da kendine has bⁿyⁿk bir zevki vard²r. ▌yi bir anti-virⁿs yazabilmek iτin en ba■ta, bilgisayar²n donan²m²na ve ⁿzerinde τal²■an programlara tam anlam²yla hⁿkmedebilecek Assembler, C, Pascal gibi bir programlama dilini iyi bilmek gereklidir. ╓zellikle de, RAM bellekte aktif halde bulunan virⁿsleri tespit etme ve temizlemede gⁿτlⁿ bir programlama diline ihtiyaτ vard²r.
▌yi bir anti-virⁿs yazabilmek iτin ikinci ■art ise; virⁿsleri, nas²l τal²■t²klar²n², nereye nas²l bula■t²klar²n², ne zaman ve nas²l zarar verdiklerini vs. bilmek gerekir. Ayr²ca bir virⁿs yazar² gibi de dⁿ■ⁿnebilmek ÷nemli. B÷ylece en sinsi ve iyi yaz²lm²■ virⁿsleri bile yakalay²p imha edebilirsiniz.
Tabii ki herhangi bir programlama dilinde de (hatta DOS komutlar²yla) virⁿsler tespit edilebilir ve temizlenebilir. Bunu yapabilmek iτin virⁿsleri τok tan²maya da gerek yok. Yeter ki temel birkaτ bilgiye sahip olunsun.
Virⁿslerin bootÆa bula■an tiplerini tespit etmek ve silmek genelde kolayd²r. Bunlar²n τo≡u 640 KBÆl²k geleneksel belle≡i 1 ile 3 KB aras²nda eksiltirler. MEM, CHKDSK veya benzeri komut ve programlarla bellekte aktif durumdaki boot virⁿsleri tespit edilebilir. ▐unu da unutmamal² ki, virⁿs olmayan baz² program ve ROM-BIOSÆlar da geleneksel belle≡i azaltabilirler. Sabit diskteki bir boot virⁿsⁿnⁿ imha etmek iτin en kolay ve etkili yollardan biri FDISK /MBR komutunu vermektir (Bu y÷ntemi Haziran æ96 say²s²nda "Kim Korkar Virⁿslerden" kapak yaz²s²nda detayl² olarak bulabilirsiniz.)
Dosyalara bula■an virⁿsleri tespit etmek, hem daha kolay, hem de daha zordur. Yani virⁿsⁿne g÷re de≡i■ir. Dosya virⁿsleri genelde EXE ve COM uzant²l² dosyalar²n ba■²nda ve sonunda baz² de≡i■iklikler yapar. Virⁿs, daha pratik oldu≡u iτin hedef dosyan²n sonuna kendisini ekler. Bula■t²≡² program τal²■²nca aktif olabilmek iτin, hedef dosyan²n ba■²nda bir kaτ de≡i■iklik yapar.
Geleneksel anti-virⁿs programlar²n²n τal²■ma prensibi de basitτe ■÷yle:
1. Anti-virⁿs τal²■²r τal²■maz RAM bellekte virⁿs taramas² yapar. B÷ylece aktif haldeki bir virⁿsⁿn problem τ²karmas²n² ve dosyalar²n taranmas² s²ras²nda bula■mas²n² ÷nler.
2. Sabit diskin Ana Boot Sekt÷rⁿ (Partition Table da bunun iτinde yer al²r) ile taranacak sabit disk sⁿrⁿcⁿsⁿnⁿn Boot Sekt÷rⁿnⁿ Boot Virⁿsⁿ taramas²ndan geτirir. Disketlerde sadece disketin Boot Sekt÷rⁿne bak²l²r.
3. Verilen disk sⁿrⁿcⁿsⁿndeki dosyalar taran²r. ▌■leme girecek dosyalar EXE, COM, OVL, BIN ve benzeri τal²■abilecek program kodu iτeren dosyalar olabilece≡i gibi, tⁿm dosyalar da tarama i■lemine sokulabilir. Geli■mi■ anti-virⁿs programlar² ZIP ve ARJ uzant²l² s²k²■t²r²lm²■ dosyalar² da bellekte aτ²p tarayabilmektedir.
Dosyalarda virⁿs tespit etmek iτin kullan²lan en eski ve basit y÷ntem, virⁿsⁿn imzas²n² aramakt²r. Bu y÷ntemin en bⁿyⁿk zay²fl²≡², yeni τ²kan ve program kodu de≡i■en virⁿslerin tespit edilememesidir. Virⁿslerin imzalar², dosyalara bula■m²■ virⁿslerin kodlar² incelenerek bulunur. Virⁿsⁿn kodunda de≡i■meyen ve g÷ze batan 4-32 baytl²k bir dizi virⁿsⁿn imzas² olarak seτilir. Bunda dikkat edilecek ÷nemli bir nokta da virⁿsⁿn ta■²d²≡² herhangi bir mesaj² imza olarak seτmemektir. Baz² "virⁿsseverler" zevk iτin bu mesajlar² de≡i■tirip, "hafif de≡i■mi■" virⁿsleri etrafa bula■t²r²rlar. Bu durumda anti-virⁿs program², virⁿsⁿn imzas² oldu≡u halde tespit edemez. Eh, bu kadar genel bilgiden sonra QBASICÆte bir anti-virⁿsⁿ nas²l yap²l²r konusuna gelelim. Ekstra komutlar kullanmadan QBASICÆte dosya virⁿslerini tespit eden bir anti-virⁿs yap²labilir. Fakat boot virⁿsleri konusunda i■ zor. ╟ⁿnkⁿ boot sekt÷rleri okumak iτin QBASIC yetersizdir. Makina Dili alt programlar kullanmak veya ba■ka τ÷zⁿmler bulmak gerekir. Dosya virⁿslerini tespit edebilecek bir anti-virⁿs yazarak i■e ba■layabilirsiniz. Virⁿslerin imzalar²n² birer karakter dizisi olarak tan²t²n. Virⁿs arayaca≡²n²z dosyalar² RANDOM modunda aτ²p GET ile
okuyun. Dosyan²n tamam²n² okuman²z gerekmez. Dosyan²n sonundaki 4-5 KBÆl²k k²sm²n² okuyup arama yapman²z yeterlidir. ╟ⁿnkⁿ, τo≡u virⁿsⁿn bula■t²≡² yer dosyan²n sonudur ve boyu 4-5 KBƲ geτmez.
Arama yaparken dosyadan okunan kay²tlar iτinde virⁿs imzalar²n² s²rayla aray²n. Bu i■lem, bir yaz² edit÷rⁿyle, metin iτinde bir karakter dizisinin aranmas² gibi yap²labilir. Virⁿs tespit ettikten sonra da virⁿsⁿne g÷re dosyan²n temizlenmesi i■lemine s²ra gelir. Tespit etmekten daha zor olan virⁿsⁿ dosyay² bozmadan temizlemektir. Biraz hesap kitap da gerektiren bir i■lemdir. COM dosyaya bula■m²■ bir vⁿrⁿsⁿ temizlemek genelde EXEÆlere g÷re daha basittir. Genelde dosyan²n virⁿslenmeden ÷nceki ilk baytlar² (3, 5, 16 veya daha fazlas²), sonlardaki virⁿsⁿn bulundu≡u yerde durmaktad²r. Bunlar²n yerini tespit ettikten sonra, dosyan²n ba■²na yaz²p, virⁿsⁿn ba■lad²≡² yerden dosya kesilerek (EOF-Dosya Sonu) orjinal dosya elde edilebilir. EXE dosyalarda virⁿs temizlerken biraz daha fazla teknik bilgiye ihtiyac²n²z olacakt²r. EXEÆlerin ba■²nda, ba■l²k (header) denilen bir parametre blo≡u vard²r. Dosyan²n uzunlu≡u, program²n nereden τal²■maya ba■layaca≡², gerekli bellek miktar² gibi bilgilerden olu■maktad²r.
Virⁿsⁿn burada yapt²≡² de≡i■iklikleri eski haline getirmek gerekiyor. Sonra da dosyan²n sonundaki virⁿslⁿ k²sm² kesip atmak.
Yⁿzeysel olarak basit bir anti-virⁿs hakk²nda verebilece≡imiz bilgi bu kadar. Yerimizin darl²≡² nedeniyle maalesef suya sabuna dokunmadan yazabileceklerimiz bunlar. Fakat belki gelecek say²larda tatmin edici bir yaz² ile bu konuda merakl² olanlar² sevindiririz.
|